function [ cost, cntr, e ] = cost2( graph, coloring )
%COST Funkcja kosztu

    cost = 0;
    % Liczenie kolorów pomalowanych na kolor i
    [cntr uniqueColors] = hist(coloring, unique(coloring));
    
    % Liczenie złych krawędzi w każdym kolorze.
    cntrEdges = zeros(numel(uniqueColors));
    s = size(graph, 1);
    e = zeros(numel(uniqueColors), 1);
    for i = 2:s
        row = graph(i,1:i-1);
        rowColoring = row.*coloring(1:i-1);
        color = coloring(i);
        occurrences = size(find(rowColoring == color));
        e(color) = e(color) + occurrences(2);
    end

    % SUMA = (liczba kolorów pomalowanych na i)^2 +
    %      + 2 * (liczba kolorów pomalowanych na i) * liczba błędnych
    %                                          krawędzi w tym kolorze
    for i = 1:numel(uniqueColors)
        cost = cost - power(cntr(i), 2) + 2 * cntr(i) * e(i);
    end
end